var fs = require('fs');

异步读取文件:
	fs.readFile('file.txt', 'utf-8', function(err, data) {
		if (err) {
			console.log(err);
		} else {
			console.log(data);
		}
	});

同步读取文件:<异常需捕获>
	var data = fs.readFileSync('file.txt', 'utf-8');
	console.log(data);
	console.log('end');

1.fs.open(path, flags, [mode], [callback(err, fd)]):
	flasg: {
		r: 	只读模式
		r+: 读写模式
		w: 	写入模式,文件不存在则创建
		w+: 读写模式,文件不存在则创建
		a:  追加模式,文件不存在则创建
		a+: 读取追加模式,文件不存在则创建
	}
	mode: 指定文件权限;

[最好不适用]
2.fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)]);
	更底层的读取文件接口；从指定的文件描述符 fd 中读取数据并写入 buffer 指向的缓冲区对象。 offset 是
	buffer 的写入偏移量。 length 是要从文件中读取的字节数。 position 是文件读取的起始位置，如果 position 
	的值为 null ，则会从当前文件指针的位置读取。回调函数传递bytesRead 和 buffer ，分别表示读取的字节数
	和缓冲区对象。
	test:
		fs.open('content.txt', 'r', function(err, fd) {
			if (err) {
				console.error(err);
				return ;
			}
			var buf = new Buffer(8);
			fs.read(fd, buf, 0, 8, null, function(err, bytesRead, buffer) {
				if (err) {
					console.error(err);
					return;
				}

				console.log('bytesRead: ' + bytesRead);
				console.log(buffer);
			})
		});


打开文件：
	异步函数：fs.open(path,flags, [mode], [callback(err, fd)])
	同步函数: fs.openSync(path, flags, [mode])
关闭文件:
	异步函数：fs.close(fd, [callback(err)])
	同步函数: fs.closeSync(fd
		
3.fs.stat
	fs.stat(fileName, function(err, stat) {
		if (err) {
			console.log(err);
			return false;
		}
		console.log("是否文件："+ stat.isFile());
		console.log("是否目录: "+ stat.isDirectory());
	});

4.fs.mkdir(path, [mode], [callback])
	fs.mkdir("css", function(err) {
		if (err) {
			//	console.log()
			//如果文件夹已经存在会报错!<error：文件已经存在>
		}
	})
7.fs.readdir(dirname, data);
9.fs.rmdir(dirname, callback);
8.fs.rename(oldname, newname, callback);  //文件改名或剪切


5.fs.writeFile(filename, data, [option], callback)  //写入文件
	fs.writeFile("test.txt", "你好", function(err) {
		if (err) {
			console.log("");
		}
		//文件不存在会创建文件,多次写入覆盖
	})

6.fs.appandFile(filename, data, callback);
7.fs.unlink(filename, callback); //删除文件


//文件流读取文件<文件比较大>
var readStream = fs.createReadStream('input.txt');
var str = '';

readStream.on('data',  function(chunk) {
	str += chunk;
})

readStream.on('end', function(chunk) {
	console.log(str);
})

readStream.on('error', function(err) {
	console.log('读取失败');
})

//文件流写入
var writeStream = fs.createWriteStream('.txt') ;
writeStream.write(data, 'utf8');
writeStream.end(); 	//标记写入完成
writeStream.on('finish', function() {
	console.log('写入完成')
})

writeStream.on('error', function() {
	console.log("写入失败");
})

//管道流
readStream.pipe(writeStream);